﻿
//创建组织机构树状图
$('#orgTree').jstree({
    'core': {
        'data': {
            'url': '/organizeapi/getlist',
            'type': 'post',
            'data': function (node) {
                return {
                    'parentorg': node.id,
                    'containsMember': (node.id == "#" ? false : true)
                };
            }
        },
        'force_text': true,
        'check_callback': true,
        'themes': {
            'responsive': true
        }
    },
    'plugins': ['state', 'dnd', 'types', 'contextmenu', 'wholerow'],
    'contextmenu': {
        'items': function (node) {
            //重设右键菜单项
            var tmp = $.jstree.defaults.contextmenu.items();
            delete tmp.create.action;
            delete tmp.ccp.submenu.copy;

            tmp.create.label = "新建";
            tmp.create.icon = "icon-plus-sign";
            tmp.create.submenu = {
                "create_dep": {
                    "label": "部门",
                    "action": function (data) {
                        tree_create("部门");
                    },
                    "icon": "icon-home"
                },
                "create_comp": {
                    "label": "单位",
                    "action": function (data) {
                        tree_create("单位");
                    },
                    "icon": "icon-group"
                },
                "create_post": {
                    "label": "岗位",
                    "action": function (data) {
                        tree_create("岗位");
                    },
                    "icon": "icon-coffee"
                },
                "create_member": {
                    "label": "成员",
                    "action": function (data) {
                        tree_create("成员");
                    },
                    "icon": "icon-user"
                }
            };

            tmp.remove.label = "移除";
            tmp.remove.icon = "icon-trash";

            tmp.rename.label = "重命名";
            tmp.rename.icon = "icon-pencil";

            tmp.ccp.label = "编辑";
            tmp.ccp.icon = "icon-edit";

            tmp.ccp.submenu.cut.label = "剪切";
            tmp.ccp.submenu.cut.icon = "icon-cut";

            tmp.ccp.submenu.paste.label = "粘贴";
            tmp.ccp.submenu.paste.icon = "icon-paste";

            return tmp;
        }
    },
    'types': {
        'default': { 'icon': 'icon-group' },
        '部门': { 'icon': 'icon-home' },
        '单位': { 'icon': 'icon-group' },
        '岗位': { 'icon': 'icon-coffee' },
        '成员': { 'icon': 'icon-user' }
    }
}).on('create_node.jstree', function (e, data) {
    doOperation({
        'url': '/organizeapi/create',
        'data': { 'orgType': data.node.type, 'parentOrg': data.node.parent, 'name': data.node.text },
        'success': function (d) {
            data.instance.set_id(data.node, d.Tag.Identity);
        },
        'fail': function (d) {
            data.instance.refresh();
        },
        'error': function (d) {
            data.instance.refresh();
        }
    });
}).on('delete_node.jstree', function (e, data) {
    bootbox.confirm(data.node.type == '成员' ? '确定要移除该成员么？' : "该组织机构下的所有子机构与成员关系都会被移除，确认要移除么？", function (result) {
        if (result == false) {
            data.instance.refresh();
        }
        else {
            doOperation({
                'url': data.node.type == '成员' ? '/userrelationapi/delete' : '/organizeapi/delete',
                'data': {
                    'id': data.node.id
                },
                'fail': function (d) {
                    data.instance.refresh();
                },
                'error': function (d) {
                    data.instance.refresh();
                }
            });
        }
    });

}).on('rename_node.jstree', function (e, data) {
    console.info(data);
    doOperation({
        'url': data.node.type == "成员" ? '/userapi/rename' : '/organizeapi/rename',
        'data': data.node.type == "成员" ? { 'identity': data.node.data.id, 'newName': data.text } : { 'org': data.node.id, 'newName': data.text },
        'fail': function (d) {
            data.instance.refresh();
        },
        'error': function (d) {
            data.instance.refresh();
        }
    });
}).on('move_node.jstree', function (e, data) {
    var ref = $('#orgTree').jstree(true);
    var parNode = ref.get_node(data.parent);
    if (parNode.type == "成员") {
        bootbox.alert("无法将节点移动至成员节点下！");
        data.instance.refresh();
    }
    else {
        doOperation({
            'url': data.node.type == "成员" ? '/userrelationapi/setorg' : '/organizeapi/setparent',
            'data': data.node.type == "成员" ? { 'relid': data.node.id, 'orgid': data.parent } : { 'org': data.node.id, 'parguid': data.parent },
            'success': function (d) {
                //data.instance.load_node(data.parent);
                data.instance.refresh();
            },
            'fail': function (d) {
                data.instance.refresh();
            },
            'error': function (d) {
                data.instance.refresh();
            }
        });
    }
}).on('dblclick.jstree', function (e) {
    tree_edit();
})
;
//编辑
function tree_edit() {
    var ref = $('#orgTree').jstree(true),
            sel = ref.get_selected();
    var selNode = ref.get_node(sel[0])
    $.ajax({
        type: 'GET',
        url: "Organize/Edit",
        data: {
            'type': selNode.type,
            'id': selNode.type == "成员" ? selNode.data.id : selNode.id
        },
        success: function (data) {
            bootbox.dialog({
                message: data,
                title: "编辑" + selNode.type
            });
        }
    });
}
//创建
function tree_create(type) {
    var ref = $('#orgTree').jstree(true),
            sel = ref.get_selected();
    if (type != "成员") {
        if (!sel.length) {
            sel = ref.create_node(null, { "type": type, text: "新" + type });
        }
        else {
            var node = ref.get_node(sel[0]);
            if (node.type == "成员") {
                bootbox.alert("不能在成员节点下添加节点！");
                return;
            }
            sel = sel[0];
            sel = ref.create_node(sel, { "type": type, text: "新" + type });
        }
        if (sel) {
            ref.edit(sel);
        }
    }
    else {
        if (!sel.length) {
            bootbox.alert("请先选择要加入成员的组织机构！");
        }
        else {
            var node = ref.get_node(sel[0]);
            if (node.type == "成员") {
                bootbox.alert("不能在成员节点下添加节点！");
            }
            else {
                $.ajax({
                    type: 'GET',
                    url: "UserRelation/Add",
                    data: {
                        'orgId': sel[0]
                    },
                    success: function (data) {
                        bootbox.dialog({
                            message: data,
                            title: "添加成员"
                        });
                    }
                });
            }
        }
    }
};
//重命名
function tree_rename() {
    var ref = $('#orgTree').jstree(true),
        sel = ref.get_selected();
    if (!sel.length) { return false; }
    sel = sel[0];
    ref.edit(sel);
};
//删除
function tree_delete() {
    var ref = $('#orgTree').jstree(true),
        sel = ref.get_selected();
    if (!sel.length) { return false; }
    ref.delete_node(sel);
};